package com.sparsearr.datastructures.ztr.tree;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

/**
 * @Author: ZhaoTR
 * @Date: Created in 2025/6/28 21:02
 * @Description: TODO
 * @Version: 1.0
 */

public class ArrayBinaryTreeTest {
    private static final Logger logger = LogManager.getLogger(ArrayBinaryTreeTest.class);

    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7};
        // 创建一个二叉树
        ArrayBinaryTree arrayBinaryTree = new ArrayBinaryTree(arr);
        arrayBinaryTree.preOrder();
    }
}

// 创建一个二叉树
class ArrayBinaryTree {
    // 数组模拟二叉树,存储数据节点
    private int[] arr;

    public ArrayBinaryTree(int[] arr) {
        this.arr = arr;
    }

    // 重载方法
    public void preOrder() {
        this.preOrder(0);
    }

    /**
     * 完成顺序存储数组二叉树的前序遍历的前序遍历
     *
     * @param index 数组索引
     */
    public void preOrder(int index) {
        // 数组为空或者数组中没有数据
        if (arr == null || arr.length == 0) {
            System.out.println("数组为空，不能进行遍历");
        }
        // 输出当前的数组元素
        System.out.println(arr[index]);
        // 向左递归遍历
        if (index * 2 + 1 < arr.length) {
            preOrder(2 * index + 1);
        }
        // 向右递归遍历
        if (index * 2 + 2 < arr.length) {
            preOrder(2 * index + 2);
        }
    }
}